package com.hs.hlw.credit.system.common.util;

import org.apache.commons.lang3.exception.ExceptionUtils;
import org.apache.commons.logging.Log;

import java.text.SimpleDateFormat;
import java.util.Date;


public class LogUtils {

	private LogUtils() {
	}

	/**
	 * 输出DEBUG级别日志
	 * 
	 * @param logger
	 *            日志记录器
	 * @param message
	 *            日志信息
	 */
	public static void debug(Log logger, String message) {
		if (logger.isDebugEnabled()) {
			logger.debug(message);
		}
	}

	/**
	 * 输出DEBUG级别日志
	 * 
	 * @param logger
	 *            日志记录器
	 * @param message
	 *            日志消息
	 * @param t
	 *            异常
	 */
	public static void debug(Log logger, String message, Throwable t) {
		if (logger.isDebugEnabled()) {
			logger.debug(message, t);
		}
	}

	/**
	 * 输出INFO级别日志
	 * 
	 * @param logger
	 *            日志记录器
	 * @param message
	 *            日志消息
	 */
	public static void info(Log logger, String message) {
		if (logger.isInfoEnabled()) {
			logger.info(message);
		}
	}

	/**
	 * 输出INfO级别日志
	 * 
	 * @param logger
	 *            日志记录器
	 * @param message
	 *            日志消息
	 * @param t
	 *            异常
	 */
	public static void info(Log logger, String message, Throwable t) {
		if (logger.isInfoEnabled()) {
			logger.info(message, t);
		}
	}

	/**
	 * 输出WARN级别日志
	 * 
	 * @param logger
	 *            日志记录器
	 * @param message
	 *            日志消息
	 */
	public static void warn(Log logger, String message) {
		if (logger.isWarnEnabled()) {
			logger.warn(message);
		}
	}

	/**
	 * 输出WARN级别日志
	 * 
	 * @param logger
	 *            日志记录器
	 * @param message
	 *            日志消息
	 * @param t
	 *            异常
	 */
	public static void warn(Log logger, String message, Throwable t) {
		if (logger.isWarnEnabled()) {
			logger.warn(message, t);
		}
	}

	/**
	 * 输出ERROR级别日志
	 * 
	 * @param logger
	 *            日志记录器
	 * @param message
	 *            日志消息
	 */
	public static void error(Log logger, String message) {
		if (logger.isErrorEnabled()) {
			logger.error(message);
		}
	}

	/**
	 * 输出ERROR级别日志
	 * 
	 * @param logger
	 *            日志记录器
	 * @param message
	 *            日志消息
	 * @param t
	 *            异常
	 */
	public static void error(Log logger, String message, Throwable t) {
		if (logger.isErrorEnabled()) {
			logger.error(message + "\n\r" + ExceptionUtils.getStackTrace(t));
		}
	}

	/**
	 * 时间记录
	 * 
	 * @param logger
	 *            日志记录器
	 * @param beginTime
	 *            开始时间
	 * @param endTime
	 *            结束时间
	 */
	public static void logTime(Log logger, Long beginTime, Long endTime) {
		Date beginDate = new Date(beginTime);
		String beginDateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(beginDate);
		Date endDate = new Date(endTime);
		String endDateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(endDate);
		logger.debug("开始时间[" + beginTime + "，" + beginDateStr + "]，结束时间["
				+ endTime + "，" + endDateStr + "]，耗时["
				+ ((endTime - beginTime) / 1000) + "]S");
	}

	/**
	 * 记录文件上传速度
	 * 
	 * @param logger
	 *            日志记录器
	 * @param beginTime
	 *            开始时间
	 * @param endTime
	 *            结束时间
	 * @param filesize
	 *            文件大小
	 */
	public static void logUploadSpeed(Log logger, Long beginTime, Long endTime,
			Long filesize) {
		Long time = (endTime - beginTime) / 1000;
		double filesizeKB = (double) filesize / 1024;
		double filesizeMB = filesizeKB / 1024;
		double speedKB = filesizeKB / time;
		double speedMB = filesizeMB / time;
		logger.debug("文件大小[" + filesizeKB + "KB，" + filesizeMB + "MB],上传耗时["
				+ time + "S]，上传速度[" + speedKB + "KB/S," + speedMB + "MB/S]");
	}

}
